#![allow(unused_variables)]

#[derive(Debug)]
struct File; // 定义一个存根式的file类型

/// 一个trait代码快，其中包含函数的类型签名，实现这个trait必须实现这些函数
/// 并且遵从函数签名。&Self中的Self是个为类型，
/// 作为类型的展位符，表示最终要实现的read的类型
trait Read {
    //提供一个具体的名称
    fn read(self: &Self, save_to: &mut Vec<u8>) -> Result<usize, String>;
}

impl Read for File {
    fn read(self: &Self, save_to: &mut Vec<u8>) -> Result<usize, String> {
        Ok(0) //一个简单的存根值
    }
}
fn main() {
    let f = File {};
    let mut buffer = vec![];
    let n_bytes = f.read(&mut buffer).unwrap();

    println!("{} byte(s) read from {:?}", n_bytes, f);
}
